package modelo;

import java.util.ArrayList;

public class Panamericano {
	
	private ArrayList<Equipo> equipos;
	private ArrayList<Juez> jueces;
	private ArrayList<Competencia> competencias;
	
	private String modalidades [] = {"Libre 50 Metros Masculino","Libre 50 Metros Femenino","Libre 100 Metros Masculino",
			"Libre 100 Metros Masculino","Pecho 50 Metros Masculino","Pecho 50 Metros Femenino","Pecho 100 Metros Masculino",
			"Pecho 100 Metros Femenino","Espalda 50 Metros Masculino","Espalda 50 Metros Femenino","Espalda 100 Metros Masculino",
			"Espalda 100 Metros Femenino","Mariposa 50 Metros Masculino","Mariposa 50 Metros Femenino","Mariposa 100 Metros Masculino",
			"Mariposa 100 Metros Femenino"};
	
	public Panamericano() {
		super();
		// TODO Auto-generated constructor stub
		equipos = new ArrayList<Equipo>();
		jueces = new ArrayList<Juez>();
		competencias = new ArrayList<Competencia>();
	}
	
	// metodos para los equipos
	
	public void agregarEquipo(Equipo equipo){
		equipos.add(equipo);
	}
	
	
	public int cantidadEquipos(){
		return this.equipos.size();
	}
	
	public Equipo buscarEquipo(String codigoEquipo){
		
		Equipo eqquipo;
		
		for(int i=0; i<this.equipos.size();i++){
			
			eqquipo=this.equipos.get(i) ;
			
			if (eqquipo.getCodigoEquipo().equalsIgnoreCase(codigoEquipo)){
				return eqquipo;
			}
			
		} // end for
		return null;
	}
	
	
	// metodos para juez
	
	public void agregarJuez(Juez juez){
		this.jueces.add(juez);
	}
		
	public int cantidadJueces(){
		return this.jueces.size();
	}
	
	public Juez buscarJuez(String cedula){
		
		Juez juez;
		
		for(int i=0; i<this.jueces.size();i++){
			
			juez=this.jueces.get(i);
			
			if (juez.getCedula().equalsIgnoreCase(cedula)){
				return juez;
			}
			
		} // end for
		return null;
	}
	
	public ArrayList<Equipo> getEquipos(){
		return this.equipos;
	}
	
	public ArrayList<Juez> getJueces(){
		
		if (jueces.size()>0){
			return jueces;
		}
		else{
			return null;
		}
			
		
	}
	
	public Juez getJuez(int posicion){
		return this.jueces.get(posicion);
	}
	
	public Equipo getEquipo(int posicion){
		return this.equipos.get(posicion);
	}

	public Competencia getCompetencia(int nivel){
		
		return this.competencias.get(nivel);
	
		
	}
	
	public Competencia getCompetencia(String Modalidad, int nivel){
		
		int tempNivel;
		String tmpModalidad;
		
		for (int i=0; i<this.competencias.size(); i++){
			
			tmpModalidad = this.competencias.get(i).getModalidad();
			tempNivel=this.competencias.get(i).getNivel() ;
			// si es la modalidad y nivel q buscamos
			if ( ( tempNivel==nivel) && (tmpModalidad.equalsIgnoreCase(Modalidad)) ){
				return this.competencias.get(i);
			}
			
		}// for
		return null;
		
	}

	
	public void agregarCompetencia (Competencia competencia){
		
		this.competencias.add(competencia);
	}

	
	
	// otro metodo
	
	public int cantidadJuecesParticipante(){
		
		int cantidad =0;
		
		for (int i=0; i< this.jueces.size();i++){
			
			if(this.jueces.get(i).getCantidadCompetencias()>0){
				cantidad++;
			}
				
		}
		
		return cantidad;
	}
	
	public ArrayList<Juez> getJuecesSinParticipar(){
		
		ArrayList<Juez> juecesSinParticipar = new ArrayList<Juez>();
		
		for (int i=0; i< this.jueces.size();i++){
			
			if(this.jueces.get(i).getCantidadCompetencias()==0){
				juecesSinParticipar.add(this.jueces.get(i));
			}

		}
		
		return juecesSinParticipar;
						
	}
	
	public void marcarParticipacionJuez(String cedula){
		
		Juez juez;
		
		for(int i=0; i<this.jueces.size();i++){
			
			juez=this.jueces.get(i);
			
			if (juez.getCedula().equalsIgnoreCase(cedula)){
				this.jueces.get(i).contarCompetencia();
			}
			
		} // end for
		
	}
	
	public int cantidadCompetencias(){
		return this.competencias.size();
	}
	
	
	public void contarMedallaOroEquipo(String cedulaNadador){
		// buscamos al nadador en el equipo y le sumamos la medalla a este
		
		Nadador nadador;
		
		for (int i=0; i<this.equipos.size(); i++){
			
			nadador = equipos.get(i).buscarNadador(cedulaNadador);
			
			if (nadador != null){
				
				equipos.get(i).contarMedallaOro();
				
			}
					
		} // for
	}
	
	
	public void contarMedallaPlataEquipo(String cedulaNadador){
		// buscamos al nadador en el equipo y le sumamos la medalla a este
		
		Nadador nadador;
		
		for (int i=0; i<this.equipos.size(); i++){
			
			nadador = equipos.get(i).buscarNadador(cedulaNadador);
			
			if (nadador != null){
				
				equipos.get(i).contarMedallaPlata();
				
			}
					
		} // for
	}
	
	public void contarMedallaBronceEquipo(String cedulaNadador){
		// buscamos al nadador en el equipo y le sumamos la medalla a este
		
		Nadador nadador;
		
		for (int i=0; i<this.equipos.size(); i++){
			
			nadador = equipos.get(i).buscarNadador(cedulaNadador);
			
			if (nadador != null){
				
				equipos.get(i).contarMedallaBronce();
				
			}
					
		} // for
	}
	
	
	public void ordenarEquipoOro(){
				
			Equipo tempEquiopo;
			
			tempEquiopo = new  Equipo();
			
			// ordenando por burbuja decreciente
			
			boolean interruptor = true;
			
			for (int p=0; p< cantidadEquipos()-1 && interruptor; p++){
				// cantidad de pasadas
				interruptor = false; // sin intercambios
				
				for (int j =0; j< cantidadEquipos() -p-1; j++){
					
					if (equipos.get(j).getMedallasOro()  < equipos.get(j+1).getMedallasOro() ){
						
						interruptor = true;
						
						tempEquiopo= equipos.get(j);
						equipos.set(j, equipos.get(j+1));
						equipos.set(j+1, tempEquiopo);

					}
				} // for 2
				
			} // for 1	
	}
		
	
	public ArrayList<Equipo> getEquiposGanadores(){
		
		
		// Ordenamos por medallas de oro
		 
		ordenarEquipoOro();
		
		// variable donde guardaremos
		
		ArrayList<Equipo> tmpEquipoA= this.getEquipos();
		ArrayList<Equipo> equiposTodos = new ArrayList<Equipo>();
		equiposTodos.clone();
		
		// ordenando burbuja para el oro..
		
		Equipo tmpEquipo  = new Equipo();
			
		boolean interruptor = true;
		
		for (int p=0; p< cantidadEquipos()-1 && interruptor; p++){
			// cantidad de pasadas
			interruptor = false; // sin intercambios
			
			for (int j =0; j< cantidadEquipos()-p-1; j++){
				
				if (this.equipos.get(j).getMedallasOro() < this.equipos.get(j+1).getMedallasOro() ){
					
					interruptor = true;		
					tmpEquipo = equipos.get(j);
					equipos.set(j,equipos.get(j+1));
					equipos.set(j+1,tmpEquipo);
				}
				else if (this.equipos.get(j).getMedallasOro() == this.equipos.get(j+1).getMedallasOro()){
						// iguales comparo plata
						
						if (this.equipos.get(j).getMedallasPlata() < this.equipos.get(j+1).getMedallasPlata()){
							// si son igual oro, comparo plata
							
							interruptor = true;		
							tmpEquipo = equipos.get(j);
							equipos.set(j,equipos.get(j+1));
							equipos.set(j+1,tmpEquipo);
						}
						else if (this.equipos.get(j).getMedallasPlata() == this.equipos.get(j+1).getMedallasPlata()){
							// si son iguales las de plata comparo las de bronce
							
							if(this.equipos.get(j).getMedallasBronce() < this.equipos.get(j+1).getMedallasBronce()){
								interruptor = true;		
								tmpEquipo = equipos.get(j);
								equipos.set(j,equipos.get(j+1));
								equipos.set(j+1,tmpEquipo);
								
							}
							// no lleva esle, ya que si son iguales en bronce tambien estan empatados, no se inercambian 
						}
					
				} // else grande de comparaciones anidadas
										
				
			} // for 2
			
		} // for 1
		
		return equipos;
	}
	
	
}
